Fix Underflow When Timer Created Inside Timer Handler #7
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When a timer is made within a timer handler, it is possible to end up with an underflow with the duration-since-start calculation. Code demonstrating the bug is as follows:
This causes the 1000ms delay to happen instantly instead of waiting. The serial output on my Arduino Uno is:
After applying my fix, it is as follows:
This is the correct behavior.
There are two ways of solving this issue, first would be to use signed longs everywhere that duration is used, but I have concerns about overflow on long-running projects, the second is to just ensure the duration isn't negative with a check. This is more computationally expensive, but I believe it should be negligible. A task can't wait for a negative time, so this case will only happen when this bug is showing its face.